package com.zhouhailin;

import java.util.Optional;

/**
 * @Author zhouhailin
 * @date 2023/1/19 10:17
 */
public class DefaultValueDemo {
    public static void main(String[] args) {

        // 第1种情况，在 Optional 对象的值为 null 的情况下
        String name = null;
        System.out.println("orElse");
        String name2 = Optional.ofNullable(name).orElse(getDefaultValue());

        System.out.println("orElseGet");
        // 类名 :: 方法名是 Java 8 引入的语法，方法名后面是没有 () 的，表明该方法并不一定会被调用
        String name3 = Optional.ofNullable(name).orElseGet(DefaultValueDemo::getDefaultValue);

        System.out.println("===========================================================");

        // 第2种情况，在 Optional 对象的值不为 null 的情况下
        String noNullName = "zhouhailin";
        System.out.println("orElse");
        String name4 = Optional.ofNullable(noNullName).orElse(getDefaultValue());

        System.out.println("orElseGet");
        // 类名 :: 方法名是 Java 8 引入的语法，方法名后面是没有 () 的，表明该方法并不一定会被调用
        // orElseGet() 没有去调用 getDefaultValue()，获取默认值
        String name5 = Optional.ofNullable(noNullName).orElseGet(DefaultValueDemo::getDefaultValue);
    }

    /**
     * 获取默认值的方法
     *
     * @return
     */
    public static String getDefaultValue() {
        System.out.println("getDefaultValue");
        return "zhouhailin";
    }
}
